package java_cup.runtime;

/**
 * This class represents a (terminal or non-terminal) symbol that, among other
 * things can be placed on the parse stack. Symbols are used to keep track of
 * state on the parse stack. The symbol currently on top of the stack contains
 * the current state in the parse_state field. In addition to the parse_state
 * field, symbols also maintain a record of the symbol number that they
 * represent in the sym field. Finally, symbols are used contain to any
 * attributes used by semantic action (this is done via fields added in
 * subclasses -- see for example, int_token and str_token).
 * 
 * @see java_cup.runtime.token
 * @see java_cup.runtime.int_token
 * @see java_cup.runtime.str_token
 * @version last updated: 11/25/95
 * @author Scott Hudson
 */

public class symbol {

	/** Full constructor. */
	public symbol(int sym_num, int state) {
		sym = sym_num;
		parse_state = state;
	}

	/* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . */

	/** Constructor without a known state. */
	public symbol(int sym_num) {
		this(sym_num, -1);
	}

	/* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . */

	/** The symbol number of the terminal or non terminal being represented */
	public int sym;

	/* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . */

	/**
	 * The parse state to be recorded on the parse stack with this symbol. This
	 * field is for the convenience of the parser and shouldn't be modified
	 * except by the parser.
	 */
	public int parse_state;
};
